package com.lagou.firstStageThirdModel;

import java.util.*;

/**
 * 使用集合实现斗地主游戏的部分功能，要求如下：
 *（1）首先准备 54 张扑克牌并打乱顺序。
 *（2）由三个玩家交替摸牌，每人 17 张扑克牌，最后三张留作底牌。
 *（3）查看三个玩家手中的扑克牌和底牌。
 *（4）其中玩家手中的扑克牌需要按照大小顺序打印，规则如下：
 * 手中扑克牌从大到小的摆放顺序：大王,小王,2,A,K,Q,J,10,9,8,7,6,5,4,3
 */
public class Fifth {
    public static void main(String[] args) {
        // 声明花色集合
        List<String> l1 = Arrays.asList("黑桃","红桃","梅花","方片");

        // 声明牌号集合
        List<String> l2 = Arrays.asList("2","A","K","Q","J","10","9","8","7","6","5","4","3");

        // 准备一个Map集合存储扑克牌value和对应的key
        HashMap<Integer, String> map = new HashMap<>();

        map.put(0, "大王");
        map.put(1, "小王");

        // 准备一个List集合存储下标
        List<Integer> keys = new ArrayList<>();
        keys.add(0);
        keys.add(1);

        int cnt = 2;
        for (String str2 : l2) {
            for (String str1 : l1) {
                map.put(cnt, str1 + str2);
                keys.add(cnt);
                cnt++;
            }
        }

        // 打乱顺序
        Collections.shuffle(keys);

        // 发牌
        List<Integer> ll1 = new ArrayList<>(); // 玩家1
        List<Integer> ll2 = new ArrayList<>(); // 玩家2
        List<Integer> ll3 = new ArrayList<>(); // 玩家3
        List<Integer> ll4 = new ArrayList<>(); // 底牌
        for (int i = 0; i < keys.size(); i++) {
            if (i < keys.size() - 3) {
                int num = i  % 3;
                switch (num) {
                    case 0: ll1.add(keys.get(i)); break;
                    case 1: ll2.add(keys.get(i)); break;
                    case 2: ll3.add(keys.get(i)); break;
                }
            } else {
                ll4.add(keys.get(i));
            }
        }

        // 手中扑克牌排序
        Collections.sort(ll1);
        Collections.sort(ll2);
        Collections.sort(ll3);

        // 手中的牌
        List<String> ls1 = new ArrayList<>(); // 玩家1
        List<String> ls2 = new ArrayList<>(); // 玩家2
        List<String> ls3 = new ArrayList<>(); // 玩家3
        List<String> ls4 = new ArrayList<>(); // 底牌

        for (int i : ll1) {
            ls1.add(map.get(i));
        }

        for (int i : ll2) {
            ls2.add(map.get(i));
        }

        for (int i : ll3) {
            ls3.add(map.get(i));
        }

        for (int i : ll4) {
            ls4.add(map.get(i));
        }

        System.out.println("玩家1手中的牌是：" + ls1);
        System.out.println("玩家2手中的牌是：" + ls2);
        System.out.println("玩家3手中的牌是：" + ls3);
        System.out.println("底牌为：" + ls4);
    }
}
